home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / WIN_PRO / DS-1.ZIP;1 / CONFIG.ZIP / RUTIL.ASM < prev    next >
Encoding:
Assembly Source File  |  1991-04-28  |  1.4 KB  |  88 lines

  1. .lall
  2. .286p
  3. .model Large
  4.  
  5. .data
  6.     extrn    _end:Word ;Stack bottom
  7.     extrn    _sp:Word  ;Icon Stack Pointer
  8.     public    STKHQQ      ; Used by parasitic heap
  9. STKHQQ    dw    Offset DGROUP: _end+512
  10. .stack
  11.  
  12. .code
  13.     extrn __amsg_exit: Far
  14.     Public __chkstk
  15. __chkstk Proc Far
  16.  
  17.     pop    cx        ; get return offset
  18.     pop    dx        ; get return segment
  19.  
  20.     Mov    Bx,Ss
  21.     Cmp    Bx,DGROUP    ; Running with current system stack?
  22.     Jne    COEXSTKCHK
  23.  
  24.     mov    bx,sp
  25.     sub    bx,ax        ; new position
  26.     jc    OMerr        ; error - out of memory
  27.     cmp    bx,[STKHQQ]    ; SP - AX : STKHQQ (for heap/stack)
  28.     jb    OMerr        ;   error - out of memory
  29.  
  30.     mov    sp,bx        ; set new stack pointer
  31.  
  32.     push    dx        ; push segment
  33.     push    cx        ; push offset
  34.     ret            ; far return to dx:cx
  35.  
  36. COEXSTKCHK:
  37.  
  38.     mov    bx,sp
  39.     sub    bx,ax        ; new position
  40.     jc    OMerr        ; error - out of memory
  41.     Mov    ax,_sp
  42.     Add    ax,512        ; Add stack slop..
  43.     cmp    bx,ax
  44.     jb    OMerr        ;   error - out of memory
  45.  
  46.     mov    sp,bx
  47.     push    dx
  48.     push    cx
  49.     ret
  50. OMerr:
  51.     xor    ax,ax
  52.     jmp    __amsg_exit     ; give stack overflow and die
  53. __chkstk Endp
  54.  
  55.     Public __stackavail
  56. __stackavail Proc Far
  57.  
  58.     Mov    Cx,Ss
  59.     Cmp    Cx,DGROUP
  60.     Jne    Costkavail
  61.  
  62.     Pop    Cx
  63.     Pop    Dx
  64.     Mov    Ax,[STKHQQ]
  65.     Cmp    Ax,Sp
  66.     Jae    L10
  67.     Sub    Ax,Sp
  68.     Neg    Ax
  69. L0D:    Push    Dx
  70.     Push    Cx
  71.     Ret
  72. L10:    Xor    Ax,Ax
  73.     Jmp    L0D
  74.  
  75. Costkavail:
  76.     Pop    Cx
  77.     Pop    Dx
  78.     Mov    Ax,_sp
  79.     Add    Ax,512
  80.     Cmp    Ax,Sp
  81.     Jae    L10
  82.     Sub    Ax,Sp
  83.     Neg    Ax
  84.     Jmp    L0D
  85.  
  86. __stackavail Endp
  87.     End
  88.